import { Canvas, Component, _decorator } from 'cc';
import { LoginCtrl } from './GamePlay/modules/Login/LoginCtrl';
import { Match3UI } from './GamePlay/modules/Match3/Match3UI';
import { ResManager } from './core/modules/res/ResManager';
import UIManager, { registerBUrlByCfg } from './core/modules/ui/UIManager';
import { PrefabCfg } from './auto/PrefabCfg';
const { ccclass, property } = _decorator;

//新增全局变量声明
declare global {
    const gCtrl: GCtrl;
}

@ccclass('GCtrl')
export class GCtrl extends Component {

    readonly loginCtrl = new LoginCtrl();
    readonly res = new ResManager();
    readonly ui = new UIManager();

    async init(param: { canvas2d: Canvas, releaseBoostFun: Function }) {

        //全局变量设置
        (globalThis as any)["gCtrl"] = this;
        //提前注册预制体信息
        registerBUrlByCfg(PrefabCfg);
        //界面管理器二段构造
        gCtrl.ui.init(param.canvas2d);
        //登录模块二段构造
        this.loginCtrl.init();
        //显示登录界面（传入登录成功回调函数）
        this.loginCtrl.showLogin(async () => {
            gCtrl.ui.openUI(Match3UI);
            param.releaseBoostFun();
            // //我们不能直接去引用 LoginBN 包中的 LoginEntry.ts 中的 LoginEntry 组件
            // //否则脚本的打包归属就会发生改变。而是通过引擎提供的 js.getClassByName 方法进行解引用
            // ResManager.ins.loadBundle("LoginBN", () => {
            //     const loginEntryClass = js.getClassByName("LoginCtrl") as typeof Component;
            //     this.node.addComponent(loginEntryClass);
            // })
        })
    }
}


